Skip to content
On this page

监控篇 - 线上埋点、预警


前言

在完整的工程化体系中,线上预警是必不可少的,但是自己全部开发的话,是非常耗时、耗力的,综合成本考虑的话,我们可以选择一些第三方开源的系统来协助我们,综合来看 Sentry 是一个非常不错的选择。

Sentry

为什么使用 Sentry

  1. 支持的开发框架非常多,基本涵盖了市面流行的所有框架

image.png

  1. sentry 支持手动与自动上报,即可无痕监听项目中的错误也可以自定义上报一些内容,分析数据。

  2. Sentry 支持私有部署,如果是公司的项目,私有化部署可以自定义更多的功能。

综上一些优点,Sentry 在对中小型公司来说,是一个不可多得的软件。

安装 Sentry

Sentry 的安装非常简单,支持 docker 直接部署,那么我们在之前的服务器中继续安装一个的 Sentry。

  1. 安装 docker-compose
    
sudo yum install epel-release
sudo yum install -y python-pip
sudo pip install docker-compose
  1. 制作本地数据库和sentry的目录配置,用来绑定挂载
    
sudo mkdir -p data/{sentry,postgres}
  1. 下载 Sentry 项目
    
git clone https://github.com/getsentry/onpremise.git
  1. 按照官网的直接安装

image.png

sudo SENTRY_IMAGE=us.gcr.io/sentryio/sentry:83b1380 ./install.sh

顺利的话,此时应该已经安装成功了,打开 http://192.168.160.88:9000/ 既可以看到下面的界面:

image.png

使用 Sentry

常规使用

  1. 创建 sentry 项目

image.png

  1. 配置项目

image.png

安装 sentry 客户端

yarn add @sentry/react @sentry/tracing

sentry 注入

import React from "react";
import ReactDOM from "react-dom";
import * as Sentry from "@sentry/react";
import { Integrations } from "@sentry/tracing";
import App from "./App";

Sentry.init({
  dsn: "",
  autoSessionTracking: true,
  integrations: [
    new Integrations.BrowserTracing(),
  ],

  // We recommend adjusting this value in production, or using tracesSampler
  // for finer control
  tracesSampleRate: 1.0,
});

ReactDOM.render(<App />, document.getElementById("root"));
  1. 获取 DSN

image.png

点击 issue 进入项目,配置选择 DSN 选项:

image.png

如果你的 DSN 为空的话

修改 Sentry 的 config.yml

###################
# System Settings #
###################

# If this file ever becomes compromised, it's important to regenerate your a new key
# Changing this value will result in all current sessions being invalidated.
# A new key can be generated with `$ sentry config generate-secret-key`
# system.secret-key: 'changeme'
system.url-prefix: 'http://my-sentry-host:9000'

然后重启 docker 即可

docker-compose build # Build the services again after updating
docker-compose up -d # Recreate the services

怕麻烦的话,自己组装一个也行:格式是 http://公钥@ip:port/projectid。

  1. 运行项目如果出现下图的请求的话,代表配置没问题了:

image.png

接下来可以看到我们已经上传了一条 Performance 信息在 sentry 里面。

image.png

我们在尝试在项目中写一个 console.log(dd),然后可以发现在 sentry 里面已经创建了一个 issue 了。

image.png

sourcemap

根据上图大家也能看到,Sentry 能捕获到错误堆栈,但是在生产中一般都是对代码做一个压缩混淆的,所以反馈出来的问题不是那么直观,我们需要上传对应的 Sourcemap 到 Sentry 上,这个时候需要用到 Sentry CLI。

因为我们的 devops 是多项目,不限于脚手架,所以我们直接用 Sentry CLI 来上传,而不借助 Webpack 的插件,有兴趣的同学可以看一下 Sentry 的 Webpack 插件。

上传 sourcemap 其实麻烦,我们只需要在 deploy 环境,在项目根路径创建一个 .sentryclirc 文件。

javascript
[defaults]
url=http://192.168.160.88:9000 
// 如果你的操作都是对的,但是 token 报错,一般都是 sentry 默认上传路径被指向 sentry.io,需要添加这个强制指向本地的 sentry 地址。

[auth]
​\r\n[defaults]\r\nurl=http://192.168.160.88:9000
project=fe-bp-ops
org=sentry
token=bd688046f6fc432daa7e7ab0e237a73bf175367364d14fe295879683a6fd1770

其中的 token 获取的方式如下图,

image.png

然后 shell 执行

shell
npx sentry-cli releases -o sentry -p fe-bp-ops files dev@0.0.1 upload-sourcemaps ./dist'

image.png

分别代表,-o 组织名,-p 项目名,files 版本,upload-sourcemaps 路径即可。执行完毕即可在 Sentry 上看到对应项目中已经存在了对应版本的 sourcemap。

image.png

本章小结

在本章,我们学习了使用 Sentry 来作为项目的线上预警系统。

Sentry 的新版本也添加了 Performance 的功能,对于前端的一些项目有一个自带的性能监控,做一个大概的参考还是不错的,毕竟免费、省力。

同时 Sentry 也支持自定义上报,如果自带的性能分析不满足的情况下,可以将一些独立的性能数据作为错误上报,然后进行分析,毕竟免费、省力,不过并不适合做业务埋点。

但是 Sentry 仅仅是一个预警工具,如果有条件,可以参考我之前的博文,做一套全面的无痕埋点系统

如果你有什么疑问,欢迎在评论区提出,或者加群沟通。 👏